"""
导数计算模块
"""

import numpy as np


class DerivativeCalculator:
    """导数计算器类"""
    
    def first_derivative(self, data: np.ndarray) -> np.ndarray:
        """
        计算一阶导数
        
        Args:
            data: 输入光谱数据
            
        Returns:
            np.ndarray: 一阶导数数据
        """
        # 对每一行（每个样本）计算一阶导数
        derivative_data = np.zeros_like(data)
        for i in range(data.shape[0]):
            derivative_data[i] = np.gradient(data[i])
        
        return derivative_data
    
    def second_derivative(self, data: np.ndarray) -> np.ndarray:
        """
        计算二阶导数
        
        Args:
            data: 输入光谱数据
            
        Returns:
            np.ndarray: 二阶导数数据
        """
        # 对每一行（每个样本）计算二阶导数
        derivative_data = np.zeros_like(data)
        for i in range(data.shape[0]):
            # 先计算一阶导数，再计算二阶导数
            first_deriv = np.gradient(data[i])
            derivative_data[i] = np.gradient(first_deriv)
        
        return derivative_data
    
    def no_derivative(self, data: np.ndarray) -> np.ndarray:
        """
        不求导（返回原始数据）
        
        Args:
            data: 输入光谱数据
            
        Returns:
            np.ndarray: 原始数据
        """
        return data.copy()